package it.gestionedocumentale.hibernate.dao;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.criterion.Example;

import it.gestionedocumentale.model.Gruppo;

public class GruppoDAO  extends BaseHibernateDAO{
	
	
		
		// property constants
		public static final String COD_GRUPPO = "codGruppo";
		public static final String DESCRIZIONE = "descrizione";
		

		public void save(Gruppo transientInstance) throws Exception{
			getSession().save(transientInstance);
		}
		
		public void update(Gruppo transientInstance) throws Exception{
			getSession().saveOrUpdate(transientInstance);
		}

		public void delete(Gruppo persistentInstance) throws Exception{
			getSession().delete(persistentInstance);
		}

		public Gruppo findById(Long id) throws Exception{
			Gruppo instance = (Gruppo) getSession().get(Gruppo.class, id);
			return instance;
		}

		@SuppressWarnings("unchecked")
		public List<Gruppo> findByExample(Gruppo instance) throws Exception{
			Criteria cri = getSession().createCriteria(Gruppo.class);
			cri.add(Example.create(instance));
			List<Gruppo> results = cri.list();
			return results;
		}
		
		@SuppressWarnings("unchecked")
		public List<Gruppo> findAll() throws Exception{
			String queryString = "from Gruppo";
			Query queryObject = getSession().createQuery(queryString);
			return queryObject.list();
		}

		@SuppressWarnings("unchecked")
		public List<Gruppo> findByProperty(String propertyName, Object value) throws Exception{
			String queryString = "from Gruppo as model where model." + propertyName
					+ "= ?";
			Query queryObject = getSession().createQuery(queryString);
			queryObject.setParameter(0, value);
			return queryObject.list();
		}
		
		public List<Gruppo> findByCodGruppo(Object codGruppo) throws Exception{
			return findByProperty(COD_GRUPPO, codGruppo);
		}
		
		public List<Gruppo> findByDescription(Object descrizione) throws Exception{
			return findByProperty(DESCRIZIONE, descrizione);
		}
	
		public Gruppo merge(Gruppo detachedInstance) throws Exception{
			Gruppo result = (Gruppo) getSession().merge(detachedInstance);
			return result;
		}

	}



